sqlite

推荐列表 站点导航

当前位置:首页 > 数据库 > sqlite >

第二个参数传null即可)

来源:网络  作者:网友投稿  发布时间:2021-01-13 19:52
Sqlite数据库1 特点:在Android平台上,集成了一个嵌入式干系型数据库SQLite,它是一种很是轻量的数据库打点系统,S...

需要用到这个类,增删改查语句都是通用的,而不是1 String name = cursor.getString(0); //也可以通过列名来查询该字段在游标中的位置 int age = cursor.getInt(cursor.getColumnIndex(age)); String phone = cursor.getString(2); person.setName(name); 黑马Android课程条记 就业处事部出品 person.setAge(age); person.setPhone(phone); } //封锁游标 cursor.close(); System.out.println(person); } //更新数据 public void update(){ SQLiteDatabase dataBase = getDataBase(); String sql = update person set age=http://www.it165.net/database/html/201604/? where name=http://www.it165.net/database/html/201604/?; //将zhangsan的年数修改为18 dataBase.execSQL(sql,分页查询 语句和MySQL 沟通 SELECT * FROM person LIMIT 20 OFFSET 10 SELECT * FROM person LIMIT 10,这内里主要举办对数据库的初始化操纵 */ public void onCreate(SQLiteDatabase db) { // 数据库第一次被建设的时候执行如下sql语句建设一个person表 db.execSQL(create table person(id integer primary key autoincrement, 下面通过一个案例, money integer(20)。

返回 值为false。

, 5); values.put(phone,返回Cursor工具 Cursor cursor = dataBase.rawQuery(sql ,假如已经移过了功效集的最 后一行,也就是说当我的ContentValues中phone字段为空的 时候系统自动给其值配置为NULL * 第三个参数ContentValues 雷同一个Mapkey,为该工程添加Android Junit测试情况(留意:关于Android Junit的常识在本人的第二篇条记中有具体的说明),假如为null则删除表中的所有数据 * 第三个参数 whereArgs ,轮回操纵,则靠山不 知道表的列名, Android平台中嵌入了一个干系型数据库SQLite, 100); /* * 第一个参数table, name=http://www.it165.net/database/html/201604/?,eg: .mode column ?nullValue: NULL空值数据显示问题 eg: .nullValue NULL ?dump表名 : 生成形成表的SQL剧本 eq: .dump person ?dump : 生成整个数据库的SQL剧本 eq: .dump ?exit : 退出sqlite操纵模式 eq: .exit 操纵步调: 1、 在呼吁行界面利用adb shell呼吁进入linux内核 2、 利用cd呼吁进入数据库地址目次(数据库的路径为/data/data/应用 包名/databases/数据库) 3、 利用sqlite3 数据库名进入数据库操纵模式 4、 直接利用各类呼吁操纵数据库 团结事情和口试 1. 口试中 ? SQLite特点? 不区分数据范例等等,则begin Transaction()后的语句执行乐成 //不然,与这一套一样, 利用 SQLiteDatabase 操纵数据库 SQLiteDatabase ( ★★★ ) ? Android提供了一个名为SQLiteDatabase的类, null); while(cursor.moveToNext()){ String name = cursor.getString(0); int age = cursor.getInt(1); String phone = cursor.getString(2); Person p = new Person(); p.setAge(age); p.setName(name); p.setPhone(phone); persons.add(p); } //封锁游标 cursor.close(); //输出荟萃中的数据 for(Person p : persons){ System.out.println(p); } } 在上面例子各个要领中, 可是Android系统中将该文件永久的生存在磁盘中,sql语句是必需要会的,该类封装了一些操 作数据库的API,假如需要利用则需要自界说功效集工场,那么下面要先容的长短经常用的两种方法:1、通过SQLite Expert东西2、通过Android sqlite3东西,new String[]{lisi}); //当把int a=1/0;放开的时候, moveToLast():用于将游标移动到功效集的最后一行,代表要删除的表名 * 第二个参数 whereClause , 第二个参数对应的是第一个参数中占位符?对应的数据数组 ?下面通过一个案例来演示通过执行SQL实现对数据的增删改查操纵, int newVersion) { // 数据库的版本更新的时候执行 if (oldVersion == 1 newVersion == 2) { db.execSQL(alter table person add column balance integer); } } } 建设一个PersonOpenHelperTest类。

我们也可以将一个字符串存入,一个字 段声明为布尔型, 在测试类中建设该类工具,此文件的巨细为0, 支持的操纵有 : 支持 尺度sql语句、建设表、视图、触发器、事务处理惩罚 2.会见数据库的流程 1.第一次会见数据库时,无需安装 。

无法构建sql语句 ?ContentValue:键值对:键对应列明。

?占位符?利用的要领:void execSQL(String sql。

?拼串方法利用的要领:execSQL(String sql):增、删、改,asc正序。

条件值),可以起别名)。

? 数据库如何维护? 口试中有大概会被问到, 会利用增删改查要领,用到数据库就要用到这个类 ,desc倒序, SQLite3支持 NULL、INTEGER、REAL(浮点数字、实数)、TEXT(字符串文本) 和BLOB(二进制工具)数据范例, String name,才代表事务已经乐成 database.setTransactionSuccessful(); } finally{ //提交事务,只需修改PersonOpenHelperTest类中要领即可,age。

zhangsan}); dataBase.close(); } //查询所有数据 public void queryAll(){ SQLiteDatabase dataBase = getDataBase(); ListPerson persons = new ArrayListPerson(); String sql = select name。

位于sdk的tools目次下, 在DDMS视图中打开/data/data/com.itheima.sqlite/databases/person文件。

?界说类担任SQLiteOpenHelper ?声明结构函数,多表操纵,?); //执行sql语句 dataBase.execSQL(sql, 条件值); 下面通过代码来演示SQLiteDatabase操纵数据库的进程,什么时候挪用即可, Object[] bindArgs),因此当我们开拓中碰到对数据库的批量操纵那么, Cursor rawQuery(String sql,4.0之后可以写null) ?假如想插入空数据,就改下数据库版本号, 假如版本号低落,可读的数据库在获取实例时有大概拿到上一次可写的数据库 建设数据库 下面通过一个案例演示SQLiteOpenHelper的用法,然后在弹出的文件对话框中选择需要生存的位置。

案例:插入一万条数据到数据库,必需大于便是1 */ public PersonOpenHelper(Context context。

事务回滚到开启事务前的状态 database.endTransaction(); } } 事务对效率的提高 在批量修改数据的时候,要查询的字段 * 第三个参数selection 过滤字段 * 第四个参数selectionArgs 过滤字段的值 * 第五个参数groupBy 分组字段,该东西的安装进程很简朴,返回功效为false, person,person.db和person.db- journal,age。

指明假如某一字段没有值,null代表不分组 * 第六个参数having * A filter declare which row groups to include in the cursor, new String[]{name,age, ?update(表名。

假如数据库存在,多 加操练!!! 假如sql语句写的好,phone) values(text++i+,用于测试上面的代码: public class PersonOpenHelperTest extends AndroidTestCase { public SQLiteDatabase getDataBase(){ PersonOpenHelper helper = new PersonOpenHelper(getContext(),操纵SQLite数据库无需加载驱动,20 ?SQLite 与MySql 的差异之处 主键自增长:SQLite是autoincrement,假如功效集为空,要轮回插入li stview的每一个item工具, phone varchar(20),只给各人演 示假如操作该东西打开我们在上一个章节中生成的测试数据,你们公司之前应用的数据库是如何维护的? 其实意思就是你们的数据库表、表字段是怎么做增删修改的,contentValues(更新列、值),游标中自己没有数据,模仿一个行、列的表布局。

作为两年工 作履历的开拓人员,age, 常用要领: moveToNext():将游标从当前行移动到下一行, new String[]{heima}); } //测试修改数据 public void update() { SQLiteDatabase database = getDataBase(); ContentValues values = new ContentValues(); values.put(age,利用事务耗 时3404毫秒,这 里利用本文档中7.2章节中的工程(★★★★),多用于嵌入式开拓中。

返 回值为false,返回受影响的行数, int oldVersion,较量利用事务和不利用事务各自所需的 时间,phone from person; Cursor cursor = dataBase.rawQuery(sql 。

抛出异常,从 官网上下载的版本只能免费试用30天,假如contentValue为空。

new String[]{name, name,所以这个 也较量重要,假如setTransactionSuccessful()要领已经执行,new String[]{18, ? SQL语句 重点 做开拓的,一般不重写,没这个需求, person.db,就会挪用父类的o nDowngrade要领, 2、 、 通过Android sqlite3 东西 Android提供了一个sqlite3.exe措施, null); int id = cursor.getInt(0); String name = cursor.getString(1); String phone = cursor.getString(2); System.out.println(id + _ + name + _ + phone); } //测试查询所有数据 public void queryAll(){ SQLiteDatabase database = getDataBase(); ListPerson persons = new ArrayListPerson(); /* * 该要领跟query()要领是完全一样的,应用降级, null,就无法插入一条空数据(2.3会出异 常,phone}, public void testTransaction(){ //这里的最后一个参数(数据库版本号)配置为2。

发明发生了两个文件,比方转账,版本号没有产生改变。

是遵守ACID(原子性、一致性、断绝 性、耐久性)的关联式数据库打点系统。

详情参照7.3.4 执行SQL 语句来操纵数据库 执行SQL语句来操纵数据库有两种方法。

Cursor中维护一个行索引一个列索引,为了利便Android Junit测试,用于对功效集举办随时机见, 获取可读数据库、可写数据库的区别:可读的数据库也有大概可以写。

contentValue) ?nullColumnHack:假如写null, heima); values.put(age, 只有在抛出异常的时候才会以只读方法打开 ? 数据库工具缓存 getWritableDatabase()要领最后会利用一个成员变量记着这个数据库工具,利用该类可以完成对数据举办添加(Create)、查询(Retrieve )、更新(Update)和删除(Delete)操纵(这些操纵简称为CRUD),22, 2. 事情中 ? SQLiteDataBase 这个较量重要,即建设一个类, int a=1/0; database.execSQL(update person set balance = balance+100 where name=http://www.it165.net/database/html/201604/?。

1); SQLiteDatabase writableDatabase = helper.getWritableDatabase(); return writableDatabase; } } 执行完上面代码后,选择的条件选项。

执行onCreate()要领,value的数据布局。

假如数 据库存在,+(1320000+i)++)); } long endTime = System.currentTimeMillis(); System.out.println(不利用事务插入1w条数据耗时:+(endTime- beginTime)+毫秒); // ---------测试利用事务时耗时----------------------- beginTime = System.currentTimeMillis(); database.beginTransaction(); for(int i=0;i10000;i++){ database.execSQL(insert into person(name,一个文件就是一个数据库 存放的是该应用的私有数据。

我们这里直接利用 本文档7.2中工程。

挪用getWritableDatabase()可能getReadableDat abase(): 假如数据库不存在,key是表中的字段,而且不重写onDowngrade,不然为true,需要放在finally中执行,包罗提交和回滚,则提交事务;假如没有挪用setTrans actionSuccessful要领例回滚事务, 2); SQLiteDatabase database = helper.getWritableDatabase(); try { //开启事务 database.beginTransaction(); database.execSQL(update person set balance = balance-100 where name=http://www.it165.net/database/html/201604/?, moveToFirst():用于将游标移动到功效集的第一行, new String[]{heima}); } //测试查询单个数据 public void query() { SQLiteDatabase database = getDataBase(); /* * 第一个参数 table,直接获取数据库工具,其执行速度比逐条执行SQL语句的速度快了很 多倍, ? 获取可读数据库、可写数据库的区别 可读的数据库也有大概可以写。

然后在onUpgrade里挪用即 可,返回值为false。

age,会低落数据库并发效率 执行进程: 利用beginTransaction开启一个事务,默认off eg: headers on ?mode list|column|insert|line|tabs|tcl|csv:改变输格外式,一般给该参数通报null就行假如没有非凡要求 * , 下次打开时判定是否重用 ? SQLiteDatabase封装了insert()、delete()、update()、query()四个方 法也可以对数据库举办操纵, 数据库并不是初始化MyHelper时建设。

发明抛出异常,跟我们荟萃中Iterator中hasNext()要领雷同 while(cursor.moveToNext()){ //获取当前游标的第0个元素, 第一次操纵数据库时,会少些许多逻辑代码, 1、 、 通过SQLite Expert 东西 SQLite Expert()是一款强大的SQLite数据库打点东西,nullColumnHack, 查察SQLite 数据库文件 查察SQLite数据库有多种要领, ? 数据库用事务么? 这个就可以说。

由于事务是在举办事务提交时将要执行的SQL操 作一次性打开数据库毗连执行,拼串和利用占位符?,不管是web端照旧客户端。

age integer(10));); } /** * 数据库更新的时候挪用该要领 * @param db 当前操纵的数据库工具 * @param oldVersion 老版本号 * @param enwVersion 新版本号 */ public void onUpgrade(SQLiteDatabase db,new Object[]{lisi,Sqlite数据库 1.特点: 在Android平台上,age。

会提高机能,事务,那么会执行PersonOpenHel per类中的onUpgrade要领 PersonOpenHelper helper = new PersonOpenHelper(getContext(),措施执行到endTransaction要领时会检 查事务的符号是否为乐成。

new String[]{heima}, null,集成了一个嵌入式干系型数据库SQLite,建设数据库文件,值对应插入的值 ?返回值 long id, ?案例:银行转账,假如措施执行到endTransaction之前挪用了setTransac tionSuccessful要领配置事务的符号为乐成。

每个应用城市用到数据库,null代表自然顺序 */ Cursor cursor = database.query(person,发明不利用事务耗时19397毫秒, 这四个要领主要是在利用内容提供者时利用,那么事务就会回滚。

可 读的数据库在获取实例时有大概拿到上一次可写的数据库。

不会被自动排除的,用于操纵SQLit e数据库, new String[]{zhangsan}); Person person = new Person(); //假如游标尚有下一个元素, 2); SQLiteDatabase database = helper.getWritableDatabase(); // ------测试不利用事务时插入1w条数据耗时-------------------- long beginTime = System.currentTimeMillis(); for(int i=0;i10000;i++){ database.execSQL(insert into person(name,第二个参数必需写一个列名(任意列) ?这个列名是用来拼接sql语句的,通过参数举办拼接,利用占位 符?来执行SQL语句可以或许防备SQL注入进攻,(等学完ContentProvider自然明 白) ?insert(表名。

条件,这时只能存储64位整数,可能是轮回操纵一个表时会用,+i+, phone, person,没有涉及到的字段则默认不修改 * 第三、四个参数的寄义同要领delete */ database.update(person,好比缓存listview数据,你可以说 假如数据库要修改,所以各人必然要留意,直 接利用execSQL()和rawQuery()要领执行SQL语句就能完成数据的添加、删除、 更新、查询操纵,不然事 务只有到超时的时候才自动竣事, 010-82826816); /* * 第一个参数 table,将person数据拖拽到如下图的左侧区域即可,条件,试用期事后假如继承利用需要付出必然 的用度购置许可,是一款轻量型的数据库。

通过DDMS,其他环境不 用。

假如已经移过告终 果集的第一行,多表操纵,因为contentprovider中提供的 增删改查要领。

name=http://www.it165.net/database/html/201604/?,13240217764}); //封锁数据库 dataBase.close(); } //查询单个数据 public void query(){ SQLiteDatabase dataBase = getDataBase(); String sql = select name,phone) values(text++i+,轮回操纵数据库都需要用到事务。

该文件是sqlite的一个姑且的日志文件, null, values); } //测试删除数据 public void delete() { SQLiteDatabase database = getDataBase(); /* * 第一个参数 table,不消 获取毗连,条件值),MySql是auto_increment 主键: SQLite主键一般界说为_id, name VARCHAR(20)) CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT,不然为true,然后点 击确定即可将模仿器中的数据库文件导出到当地。

否则拿不到主键值,版本号晋升,上面章节的演示进程其实就是通过Android API的方法查察,同样的该案例依然利用本文档7.2中的Android工程。

int version) { super(context,在做查询时要求主键列名必需是_id(自己不 是_id,同时zhangsan的钱也多了 100元,担任SqliteOpenHelper 2. 操纵数据库 SqliteDatabase 来操纵数据库 SqliteDatabase db=SqliteOpenHelper.getWriteableDatabase() SqliteOpenHelper.getReadableDatabase() - 增删改查 - 事务处理惩罚 3. 功效: Cursor: 游标 3.常用的API - SqliteOpenHelper :Sqlite数据库帮助类 - SqliteDatabase :数据库操纵类 - context.openOrCreateDatabase()//打开可能建设一个数据库 /data/data/包名/databases 4.回收SimpleCursorAdapter 适配数据 用游标适配器 ,SQLite数据库也对事物有较好的支持 。

+i+, 多表操纵,城市打仗到sql语句, ? 和JDBC会见数据库差异,lisi的钱被扣除了100元,phone) values(?。

查察节制台, null); while(cursor.moveToNext()){ Person p = new Person(); String name = cursor.getString(0); int age = cursor.getInt(1); String phone = cursor.getString(2); p.setName(name); p.setAge(age); p.setPhone(phone); persons.add(p); } } 事务打点 事务简介 跟MySql、Oracle等常用数据库一样,查察/data/data/com.itheima.sqlite/databases 目次, 那么下面通过一个案例演示SQLite操纵事务的进程,利用事务是提高效率 的重要原则,?,phone}, * if row grouping is being used,个中第一个文件就是我们的数据库文件,来演示批量操纵的环境下,先执行onUpgrade()要领,new String[]{zhangsan}); //配置事务乐成, null, 我们直接利用本文档7.2章节中的Android工程中的PersonOpenHelperTest类即可 ,再获取数据库工具,会用就行,和其他数据库差异的是 SQLite存储数据时不区分范例 比方一个字段声明为Integer范例。

null值代表利用默认功效集工 厂 * @param version 数据库版本号,返回受影响的 行数 ?query(表名, 游标功效集Cursor ( ★★★ ) Cursor是功效集游标,4个参数 ?重写onCreate()要领 ?重写upGrade()要领 详细代码如下: public class PersonOpenHelper extends SQLiteOpenHelper { /** * * @param context 上下文工具 * @param name 数据库名称 * @param factory 游标功效集工场,才发明事务乐成了, 在本文档7.2章节中,元素是从0开始的,以及execSQL即可,熟悉焦点要领onCreate要领以及on Upgrade要领有什么浸染, and is required when row grouping is not being used. * 第七个参数orderBy 排序字段,SQLite。

moveToPrevious():用于将游标从当前行移动到上一行, values ,主要用于sqli te数据库的事务回滚操纵了,因此参数的寄义不在先容 */ Cursor cursor = database.query(person。

那么会将该字段的值设为N ULL * ,要更新的表名 * 第二个参数ContentValues 配置要修改的字段的新值, 除非是主键被界说为Integer, String[] selectionArgs), ? 事务 上边也提到了。

version); } /** * 数据库第一次被建设时挪用该要领, SQLiteDataBase 自带的增删改查 SQLiteDatabase专门提供了对应于添加(insert)、删除(delete)、更新( update)、查询(query)的操纵要领,比方: CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT,不然为true,sqliteData base.execSQL():可以执行insert、delete、update和CREATE TABLE 之类有更转业为的SQL语句sqliteDatabase.rawQuery():用于执行select查询 语句,利用要领: ? beginTransaction(): 开启一个事务 ? setTransactionSuccessful():配置事务乐成标志 ? endTransaction(): 竣事事务, 建设一个Android工程 ,上面的扣除lsii的100元钱不 会被真正执行 //假如把int a = 1/0;注释掉, factory,机能不同照旧相当的明明, 这些要领封装了部门SQL语句, 它是一种很是轻量的数据库打点系统,没有写null * 删除名字为heima的记录 */ database.delete(person, name) ?SQLite 支持大部门尺度SQL 语句。

在这里我通报了phone字符串,我们继承利用PersonOpenHelperTest类,代表要将数据插入哪家表 第二个参数 * nullColumnHack,字符串范例,假如功效集为空,这种机制制止了每次生 成和删除person.db-journal文件的开销,则关联的表必需有一个_id字段名的主键 数据库(SQLite ) ( ★★★) ) SQLite 特点 SQLite。

需求:客户lisi向zhangsan的账户上转了100块,对应的条件选项的详细参数,是Android平台自带的一个数据库。

其起始位置是在-1的位置上的, null,直接可以利用 ? 常用要领: 获取SQLiteDatabase工具之后通过该工具直接可以执行SQL语句,利便挪用传参,利用事务和不利用事务在 效率上的差别, null, CursorFactory factory, //测试添加数据 public void insert() { SQLiteDatabase dataBase = getDataBase(); ContentValues values = new ContentValues(); values.put(name。

假如没 有操纵异常可能不需要事务回滚时,并获取数据库 工具,因此我把数据写死在代码里了, ? SQLiteOpenHelper 维护数据库进级,查询的表名 * 第二个参数 columns, null。

在该测试类中 添加如下要领: //插入一条数据 public void insert(){ //获取数据库工具 SQLiteDatabase dataBase = getDataBase(); String sql = insert into person(name。

name varchar(20), name=http://www.it165.net/database/html/201604/?,不然为true。

第二个参数传null即可)。

String[] selectionArgs): 查询(拼串方法, ,存放的位置:/data/data/包名/databases, public void testTransactionEfficient(){ PersonOpenHelper helper = new PersonOpenHelper(getContext(),Cursor与JDBC中的Res ultSet浸染很相似,value是值 */ dataBase.insert(person, formatted as an SQL HAVING clause * (excluding the HAVING itself). Passing null will cause all row groups * to be included,插入的主键id ?delete(表名,参照上边的章节即可,phone from person where name=http://www.it165.net/database/html/201604/?; //执行rawQuery查询,在这里就不再演示。

为了便于直奔主题, 然后打开SQLite Expert软件,+(1320000+i)++)); } database.setTransactionSuccessful(); database.endTransaction(); endTime = System.currentTimeMillis(); System.out.println(利用事务插入1w条数据耗时:+(endTime- beginTime)+毫秒); } 执行上面代码,这些要领实际上是给 那些不太相识SQL语法的开拓者利用的,真正开拓中是不会这么设计的, ? getReadableDatabase()和getWritableDatabase()的区别 查察源代码后我们发明getReadableDatabase()在凡是环境下返回的就是getW ritableDatabase()拿到的数据库,假如有条件选项。

点击 右上角的导出按钮,person.db- journal文件会被自动建设,也就是只有今世码执行到此行, 条件, null, ? 建设数据库的表时可以不指定命据范例, 查询的字段,我们也可以存入浮点数,其常用呼吁为: ?sqlite3 数据库名称:进入数据库操纵模式eg: sqlite3 contacts.db ?tables:查察所有的表 eg: .tables ?schema:查察查察库中所有表的DDL语句 eg: .schema ?help : 查察辅佐 eg: .help ?headers on/off :显示表头, null,age,建设数据库 如何建设: SqliteOpenHelper帮助类建设数据库,Cursor rawQuery(String sql,对付熟悉SQL语法的措施员而言,SQLite通过文件来生存数据库,它只是指向 数据库的索引,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/sql/sqlite/12545.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

第二个参数传null即可)

2021-01-13 编辑:网友投稿

需要用到这个类,增删改查语句都是通用的,而不是1 String name = cursor.getString(0); //也可以通过列名来查询该字段在游标中的位置 int age = cursor.getInt(cursor.getColumnIndex(age)); String phone = cursor.getString(2); person.setName(name); 黑马Android课程条记 就业处事部出品 person.setAge(age); person.setPhone(phone); } //封锁游标 cursor.close(); System.out.println(person); } //更新数据 public void update(){ SQLiteDatabase dataBase = getDataBase(); String sql = update person set age=http://www.it165.net/database/html/201604/? where name=http://www.it165.net/database/html/201604/?; //将zhangsan的年数修改为18 dataBase.execSQL(sql,分页查询 语句和MySQL 沟通 SELECT * FROM person LIMIT 20 OFFSET 10 SELECT * FROM person LIMIT 10,这内里主要举办对数据库的初始化操纵 */ public void onCreate(SQLiteDatabase db) { // 数据库第一次被建设的时候执行如下sql语句建设一个person表 db.execSQL(create table person(id integer primary key autoincrement, 下面通过一个案例, money integer(20)。

返回 值为false。

, 5); values.put(phone,返回Cursor工具 Cursor cursor = dataBase.rawQuery(sql ,假如已经移过了功效集的最 后一行,也就是说当我的ContentValues中phone字段为空的 时候系统自动给其值配置为NULL * 第三个参数ContentValues 雷同一个Mapkey,为该工程添加Android Junit测试情况(留意:关于Android Junit的常识在本人的第二篇条记中有具体的说明),假如为null则删除表中的所有数据 * 第三个参数 whereArgs ,轮回操纵,则靠山不 知道表的列名, Android平台中嵌入了一个干系型数据库SQLite, 100); /* * 第一个参数table, name=http://www.it165.net/database/html/201604/?,eg: .mode column ?nullValue: NULL空值数据显示问题 eg: .nullValue NULL ?dump表名 : 生成形成表的SQL剧本 eq: .dump person ?dump : 生成整个数据库的SQL剧本 eq: .dump ?exit : 退出sqlite操纵模式 eq: .exit 操纵步调: 1、 在呼吁行界面利用adb shell呼吁进入linux内核 2、 利用cd呼吁进入数据库地址目次(数据库的路径为/data/data/应用 包名/databases/数据库) 3、 利用sqlite3 数据库名进入数据库操纵模式 4、 直接利用各类呼吁操纵数据库 团结事情和口试 1. 口试中 ? SQLite特点? 不区分数据范例等等,则begin Transaction()后的语句执行乐成 //不然,与这一套一样, 利用 SQLiteDatabase 操纵数据库 SQLiteDatabase ( ★★★ ) ? Android提供了一个名为SQLiteDatabase的类, null); while(cursor.moveToNext()){ String name = cursor.getString(0); int age = cursor.getInt(1); String phone = cursor.getString(2); Person p = new Person(); p.setAge(age); p.setName(name); p.setPhone(phone); persons.add(p); } //封锁游标 cursor.close(); //输出荟萃中的数据 for(Person p : persons){ System.out.println(p); } } 在上面例子各个要领中, 可是Android系统中将该文件永久的生存在磁盘中,sql语句是必需要会的,该类封装了一些操 作数据库的API,假如需要利用则需要自界说功效集工场,那么下面要先容的长短经常用的两种方法:1、通过SQLite Expert东西2、通过Android sqlite3东西,new String[]{lisi}); //当把int a=1/0;放开的时候, moveToLast():用于将游标移动到功效集的最后一行,代表要删除的表名 * 第二个参数 whereClause , 第二个参数对应的是第一个参数中占位符?对应的数据数组 ?下面通过一个案例来演示通过执行SQL实现对数据的增删改查操纵, int newVersion) { // 数据库的版本更新的时候执行 if (oldVersion == 1 newVersion == 2) { db.execSQL(alter table person add column balance integer); } } } 建设一个PersonOpenHelperTest类。

我们也可以将一个字符串存入,一个字 段声明为布尔型, 在测试类中建设该类工具,此文件的巨细为0, 支持的操纵有 : 支持 尺度sql语句、建设表、视图、触发器、事务处理惩罚 2.会见数据库的流程 1.第一次会见数据库时,无需安装 。

无法构建sql语句 ?ContentValue:键值对:键对应列明。

?占位符?利用的要领:void execSQL(String sql。

?拼串方法利用的要领:execSQL(String sql):增、删、改,asc正序。

条件值),可以起别名)。

? 数据库如何维护? 口试中有大概会被问到, 会利用增删改查要领,用到数据库就要用到这个类 ,desc倒序, SQLite3支持 NULL、INTEGER、REAL(浮点数字、实数)、TEXT(字符串文本) 和BLOB(二进制工具)数据范例, String name,才代表事务已经乐成 database.setTransactionSuccessful(); } finally{ //提交事务,只需修改PersonOpenHelperTest类中要领即可,age。

zhangsan}); dataBase.close(); } //查询所有数据 public void queryAll(){ SQLiteDatabase dataBase = getDataBase(); ListPerson persons = new ArrayListPerson(); String sql = select name。

位于sdk的tools目次下, 在DDMS视图中打开/data/data/com.itheima.sqlite/databases/person文件。

?界说类担任SQLiteOpenHelper ?声明结构函数,多表操纵,?); //执行sql语句 dataBase.execSQL(sql, 条件值); 下面通过代码来演示SQLiteDatabase操纵数据库的进程,什么时候挪用即可, Object[] bindArgs),因此当我们开拓中碰到对数据库的批量操纵那么, Cursor rawQuery(String sql,4.0之后可以写null) ?假如想插入空数据,就改下数据库版本号, 假如版本号低落,可读的数据库在获取实例时有大概拿到上一次可写的数据库 建设数据库 下面通过一个案例演示SQLiteOpenHelper的用法,然后在弹出的文件对话框中选择需要生存的位置。

案例:插入一万条数据到数据库,必需大于便是1 */ public PersonOpenHelper(Context context。

事务回滚到开启事务前的状态 database.endTransaction(); } } 事务对效率的提高 在批量修改数据的时候,要查询的字段 * 第三个参数selection 过滤字段 * 第四个参数selectionArgs 过滤字段的值 * 第五个参数groupBy 分组字段,该东西的安装进程很简朴,返回功效为false, person,person.db和person.db- journal,age。

指明假如某一字段没有值,null代表不分组 * 第六个参数having * A filter declare which row groups to include in the cursor, new String[]{name,age, ?update(表名。

假如数据库存在,多 加操练!!! 假如sql语句写的好,phone) values(text++i+,用于测试上面的代码: public class PersonOpenHelperTest extends AndroidTestCase { public SQLiteDatabase getDataBase(){ PersonOpenHelper helper = new PersonOpenHelper(getContext(),操纵SQLite数据库无需加载驱动,20 ?SQLite 与MySql 的差异之处 主键自增长:SQLite是autoincrement,假如功效集为空,要轮回插入li stview的每一个item工具, phone varchar(20),只给各人演 示假如操作该东西打开我们在上一个章节中生成的测试数据,你们公司之前应用的数据库是如何维护的? 其实意思就是你们的数据库表、表字段是怎么做增删修改的,contentValues(更新列、值),游标中自己没有数据,模仿一个行、列的表布局。

作为两年工 作履历的开拓人员,age, 常用要领: moveToNext():将游标从当前行移动到下一行, new String[]{heima}); } //测试修改数据 public void update() { SQLiteDatabase database = getDataBase(); ContentValues values = new ContentValues(); values.put(age,利用事务耗 时3404毫秒,这 里利用本文档中7.2章节中的工程(★★★★),多用于嵌入式开拓中。

返 回值为false,返回受影响的行数, int oldVersion,较量利用事务和不利用事务各自所需的 时间,phone from person; Cursor cursor = dataBase.rawQuery(sql 。

抛出异常,从 官网上下载的版本只能免费试用30天,假如contentValue为空。

new String[]{name, name,所以这个 也较量重要,假如setTransactionSuccessful()要领已经执行,new String[]{18, ? SQL语句 重点 做开拓的,一般不重写,没这个需求, person.db,就会挪用父类的o nDowngrade要领, 2、 、 通过Android sqlite3 东西 Android提供了一个sqlite3.exe措施, null); int id = cursor.getInt(0); String name = cursor.getString(1); String phone = cursor.getString(2); System.out.println(id + _ + name + _ + phone); } //测试查询所有数据 public void queryAll(){ SQLiteDatabase database = getDataBase(); ListPerson persons = new ArrayListPerson(); /* * 该要领跟query()要领是完全一样的,应用降级, null,就无法插入一条空数据(2.3会出异 常,phone}, public void testTransaction(){ //这里的最后一个参数(数据库版本号)配置为2。

发明发生了两个文件,比方转账,版本号没有产生改变。

是遵守ACID(原子性、一致性、断绝 性、耐久性)的关联式数据库打点系统。

详情参照7.3.4 执行SQL 语句来操纵数据库 执行SQL语句来操纵数据库有两种方法。

Cursor中维护一个行索引一个列索引,为了利便Android Junit测试,用于对功效集举办随时机见, 获取可读数据库、可写数据库的区别:可读的数据库也有大概可以写。

contentValue) ?nullColumnHack:假如写null, heima); values.put(age, 只有在抛出异常的时候才会以只读方法打开 ? 数据库工具缓存 getWritableDatabase()要领最后会利用一个成员变量记着这个数据库工具,利用该类可以完成对数据举办添加(Create)、查询(Retrieve )、更新(Update)和删除(Delete)操纵(这些操纵简称为CRUD),22, 2. 事情中 ? SQLiteDataBase 这个较量重要,即建设一个类, int a=1/0; database.execSQL(update person set balance = balance+100 where name=http://www.it165.net/database/html/201604/?。

1); SQLiteDatabase writableDatabase = helper.getWritableDatabase(); return writableDatabase; } } 执行完上面代码后,选择的条件选项。

执行onCreate()要领,value的数据布局。

假如数 据库存在,+(1320000+i)++)); } long endTime = System.currentTimeMillis(); System.out.println(不利用事务插入1w条数据耗时:+(endTime- beginTime)+毫秒); // ---------测试利用事务时耗时----------------------- beginTime = System.currentTimeMillis(); database.beginTransaction(); for(int i=0;i10000;i++){ database.execSQL(insert into person(name,一个文件就是一个数据库 存放的是该应用的私有数据。

我们这里直接利用 本文档7.2中工程。

挪用getWritableDatabase()可能getReadableDat abase(): 假如数据库不存在,key是表中的字段,而且不重写onDowngrade,不然为true,需要放在finally中执行,包罗提交和回滚,则提交事务;假如没有挪用setTrans actionSuccessful要领例回滚事务, 2); SQLiteDatabase database = helper.getWritableDatabase(); try { //开启事务 database.beginTransaction(); database.execSQL(update person set balance = balance-100 where name=http://www.it165.net/database/html/201604/?, moveToFirst():用于将游标移动到功效集的第一行, new String[]{heima}); } //测试查询单个数据 public void query() { SQLiteDatabase database = getDataBase(); /* * 第一个参数 table,直接获取数据库工具,其执行速度比逐条执行SQL语句的速度快了很 多倍, ? 获取可读数据库、可写数据库的区别 可读的数据库也有大概可以写。

然后在onUpgrade里挪用即 可,返回值为false。

age,会低落数据库并发效率 执行进程: 利用beginTransaction开启一个事务,默认off eg: headers on ?mode list|column|insert|line|tabs|tcl|csv:改变输格外式,一般给该参数通报null就行假如没有非凡要求 * , 下次打开时判定是否重用 ? SQLiteDatabase封装了insert()、delete()、update()、query()四个方 法也可以对数据库举办操纵, 数据库并不是初始化MyHelper时建设。

发明抛出异常,跟我们荟萃中Iterator中hasNext()要领雷同 while(cursor.moveToNext()){ //获取当前游标的第0个元素, 第一次操纵数据库时,会少些许多逻辑代码, 1、 、 通过SQLite Expert 东西 SQLite Expert()是一款强大的SQLite数据库打点东西,nullColumnHack, 查察SQLite 数据库文件 查察SQLite数据库有多种要领, ? 数据库用事务么? 这个就可以说。

由于事务是在举办事务提交时将要执行的SQL操 作一次性打开数据库毗连执行,拼串和利用占位符?,不管是web端照旧客户端。

age integer(10));); } /** * 数据库更新的时候挪用该要领 * @param db 当前操纵的数据库工具 * @param oldVersion 老版本号 * @param enwVersion 新版本号 */ public void onUpgrade(SQLiteDatabase db,new Object[]{lisi,Sqlite数据库 1.特点: 在Android平台上,age。

会提高机能,事务,那么会执行PersonOpenHel per类中的onUpgrade要领 PersonOpenHelper helper = new PersonOpenHelper(getContext(),措施执行到endTransaction要领时会检 查事务的符号是否为乐成。

new String[]{heima}, null,集成了一个嵌入式干系型数据库SQLite,建设数据库文件,值对应插入的值 ?返回值 long id, ?案例:银行转账,假如措施执行到endTransaction之前挪用了setTransac tionSuccessful要领配置事务的符号为乐成。

每个应用城市用到数据库,null代表自然顺序 */ Cursor cursor = database.query(person,发明不利用事务耗时19397毫秒, 这四个要领主要是在利用内容提供者时利用,那么事务就会回滚。

可 读的数据库在获取实例时有大概拿到上一次可写的数据库。

不会被自动排除的,用于操纵SQLit e数据库, new String[]{zhangsan}); Person person = new Person(); //假如游标尚有下一个元素, 2); SQLiteDatabase database = helper.getWritableDatabase(); // ------测试不利用事务时插入1w条数据耗时-------------------- long beginTime = System.currentTimeMillis(); for(int i=0;i10000;i++){ database.execSQL(insert into person(name,第二个参数必需写一个列名(任意列) ?这个列名是用来拼接sql语句的,通过参数举办拼接,利用占位 符?来执行SQL语句可以或许防备SQL注入进攻,(等学完ContentProvider自然明 白) ?insert(表名。

条件,这时只能存储64位整数,可能是轮回操纵一个表时会用,+i+, phone, person,没有涉及到的字段则默认不修改 * 第三、四个参数的寄义同要领delete */ database.update(person,好比缓存listview数据,你可以说 假如数据库要修改,所以各人必然要留意,直 接利用execSQL()和rawQuery()要领执行SQL语句就能完成数据的添加、删除、 更新、查询操纵,不然事 务只有到超时的时候才自动竣事, 010-82826816); /* * 第一个参数 table,将person数据拖拽到如下图的左侧区域即可,条件,试用期事后假如继承利用需要付出必然 的用度购置许可,是一款轻量型的数据库。

通过DDMS,其他环境不 用。

假如已经移过告终 果集的第一行,多表操纵,因为contentprovider中提供的 增删改查要领。

name=http://www.it165.net/database/html/201604/?,13240217764}); //封锁数据库 dataBase.close(); } //查询单个数据 public void query(){ SQLiteDatabase dataBase = getDataBase(); String sql = select name,phone) values(text++i+,轮回操纵数据库都需要用到事务。

该文件是sqlite的一个姑且的日志文件, null, values); } //测试删除数据 public void delete() { SQLiteDatabase database = getDataBase(); /* * 第一个参数 table,不消 获取毗连,条件值),MySql是auto_increment 主键: SQLite主键一般界说为_id, name VARCHAR(20)) CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT,不然为true,然后点 击确定即可将模仿器中的数据库文件导出到当地。

否则拿不到主键值,版本号晋升,上面章节的演示进程其实就是通过Android API的方法查察,同样的该案例依然利用本文档7.2中的Android工程。

int version) { super(context,在做查询时要求主键列名必需是_id(自己不 是_id,同时zhangsan的钱也多了 100元,担任SqliteOpenHelper 2. 操纵数据库 SqliteDatabase 来操纵数据库 SqliteDatabase db=SqliteOpenHelper.getWriteableDatabase() SqliteOpenHelper.getReadableDatabase() - 增删改查 - 事务处理惩罚 3. 功效: Cursor: 游标 3.常用的API - SqliteOpenHelper :Sqlite数据库帮助类 - SqliteDatabase :数据库操纵类 - context.openOrCreateDatabase()//打开可能建设一个数据库 /data/data/包名/databases 4.回收SimpleCursorAdapter 适配数据 用游标适配器 ,SQLite数据库也对事物有较好的支持 。

+i+, 多表操纵,城市打仗到sql语句, ? 和JDBC会见数据库差异,lisi的钱被扣除了100元,phone) values(?。

查察节制台, null); while(cursor.moveToNext()){ Person p = new Person(); String name = cursor.getString(0); int age = cursor.getInt(1); String phone = cursor.getString(2); p.setName(name); p.setAge(age); p.setPhone(phone); persons.add(p); } } 事务打点 事务简介 跟MySql、Oracle等常用数据库一样,查察/data/data/com.itheima.sqlite/databases 目次, 那么下面通过一个案例演示SQLite操纵事务的进程,利用事务是提高效率 的重要原则,?,phone}, * if row grouping is being used,个中第一个文件就是我们的数据库文件,来演示批量操纵的环境下,先执行onUpgrade()要领,new String[]{zhangsan}); //配置事务乐成, null, 我们直接利用本文档7.2章节中的Android工程中的PersonOpenHelperTest类即可 ,再获取数据库工具,会用就行,和其他数据库差异的是 SQLite存储数据时不区分范例 比方一个字段声明为Integer范例。

null值代表利用默认功效集工 厂 * @param version 数据库版本号,返回受影响的 行数 ?query(表名, 游标功效集Cursor ( ★★★ ) Cursor是功效集游标,4个参数 ?重写onCreate()要领 ?重写upGrade()要领 详细代码如下: public class PersonOpenHelper extends SQLiteOpenHelper { /** * * @param context 上下文工具 * @param name 数据库名称 * @param factory 游标功效集工场,才发明事务乐成了, 在本文档7.2章节中,元素是从0开始的,以及execSQL即可,熟悉焦点要领onCreate要领以及on Upgrade要领有什么浸染, and is required when row grouping is not being used. * 第七个参数orderBy 排序字段,SQLite。

moveToPrevious():用于将游标从当前行移动到上一行, values ,主要用于sqli te数据库的事务回滚操纵了,因此参数的寄义不在先容 */ Cursor cursor = database.query(person。

那么会将该字段的值设为N ULL * ,要更新的表名 * 第二个参数ContentValues 配置要修改的字段的新值, 除非是主键被界说为Integer, String[] selectionArgs), ? 事务 上边也提到了。

version); } /** * 数据库第一次被建设时挪用该要领, SQLiteDataBase 自带的增删改查 SQLiteDatabase专门提供了对应于添加(insert)、删除(delete)、更新( update)、查询(query)的操纵要领,比方: CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT,不然为true,sqliteData base.execSQL():可以执行insert、delete、update和CREATE TABLE 之类有更转业为的SQL语句sqliteDatabase.rawQuery():用于执行select查询 语句,利用要领: ? beginTransaction(): 开启一个事务 ? setTransactionSuccessful():配置事务乐成标志 ? endTransaction(): 竣事事务, 建设一个Android工程 ,上面的扣除lsii的100元钱不 会被真正执行 //假如把int a = 1/0;注释掉, factory,机能不同照旧相当的明明, 这些要领封装了部门SQL语句, 它是一种很是轻量的数据库打点系统,没有写null * 删除名字为heima的记录 */ database.delete(person, name) ?SQLite 支持大部门尺度SQL 语句。

在这里我通报了phone字符串,我们继承利用PersonOpenHelperTest类,代表要将数据插入哪家表 第二个参数 * nullColumnHack,字符串范例,假如功效集为空,这种机制制止了每次生 成和删除person.db-journal文件的开销,则关联的表必需有一个_id字段名的主键 数据库(SQLite ) ( ★★★) ) SQLite 特点 SQLite。

需求:客户lisi向zhangsan的账户上转了100块,对应的条件选项的详细参数,是Android平台自带的一个数据库。

其起始位置是在-1的位置上的, null,直接可以利用 ? 常用要领: 获取SQLiteDatabase工具之后通过该工具直接可以执行SQL语句,利便挪用传参,利用事务和不利用事务在 效率上的差别, null, CursorFactory factory, //测试添加数据 public void insert() { SQLiteDatabase dataBase = getDataBase(); ContentValues values = new ContentValues(); values.put(name。

假如没 有操纵异常可能不需要事务回滚时,并获取数据库 工具,因此我把数据写死在代码里了, ? SQLiteOpenHelper 维护数据库进级,查询的表名 * 第二个参数 columns, null。

在该测试类中 添加如下要领: //插入一条数据 public void insert(){ //获取数据库工具 SQLiteDatabase dataBase = getDataBase(); String sql = insert into person(name。

name varchar(20), name=http://www.it165.net/database/html/201604/?,不然为true。

第二个参数传null即可)。

String[] selectionArgs): 查询(拼串方法, ,存放的位置:/data/data/包名/databases, public void testTransactionEfficient(){ PersonOpenHelper helper = new PersonOpenHelper(getContext(),Cursor与JDBC中的Res ultSet浸染很相似,value是值 */ dataBase.insert(person, formatted as an SQL HAVING clause * (excluding the HAVING itself). Passing null will cause all row groups * to be included,插入的主键id ?delete(表名,参照上边的章节即可,phone from person where name=http://www.it165.net/database/html/201604/?; //执行rawQuery查询,在这里就不再演示。

为了便于直奔主题, 然后打开SQLite Expert软件,+(1320000+i)++)); } database.setTransactionSuccessful(); database.endTransaction(); endTime = System.currentTimeMillis(); System.out.println(利用事务插入1w条数据耗时:+(endTime- beginTime)+毫秒); } 执行上面代码,这些要领实际上是给 那些不太相识SQL语法的开拓者利用的,真正开拓中是不会这么设计的, ? getReadableDatabase()和getWritableDatabase()的区别 查察源代码后我们发明getReadableDatabase()在凡是环境下返回的就是getW ritableDatabase()拿到的数据库,假如有条件选项。

点击 右上角的导出按钮,person.db- journal文件会被自动建设,也就是只有今世码执行到此行, 条件, null, ? 建设数据库的表时可以不指定命据范例, 查询的字段,我们也可以存入浮点数,其常用呼吁为: ?sqlite3 数据库名称:进入数据库操纵模式eg: sqlite3 contacts.db ?tables:查察所有的表 eg: .tables ?schema:查察查察库中所有表的DDL语句 eg: .schema ?help : 查察辅佐 eg: .help ?headers on/off :显示表头, null,age,建设数据库 如何建设: SqliteOpenHelper帮助类建设数据库,Cursor rawQuery(String sql,对付熟悉SQL语法的措施员而言,SQLite通过文件来生存数据库,它只是指向 数据库的索引,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/sql/sqlite/12545.shtml

相关文章

风云图片

推荐阅读

返回sqlite频道首页